import {RC, DEFAULTS} from './constants.js'
//RC是配置文件 DEFAULT是默认配置
//promisify：异步函数promise化
import {decode,encode} from 'ini'//格式分析和序列化 // ini decode目的 a='12' 变成{a:"123"}    encode相反
import { promisify } from 'util';  //async  await promisify化。。。
import fs from 'fs';
import { exit } from 'process';


// rc 操作，对文件获取 设置，删除等配置。。。
// 都进行promsie转换
let exists = promisify(fs.exists);//测试某个路径下的文件是否存在 
let readFile = promisify(fs.readFile);
let writeFile = promisify(fs.writeFile);


// 读写文件，，我都默认异步操作。。。。
export let get = async (k) => {
    let has = await exists(RC);
    let opts;
    if (has) {
        // 文件有，我就读取文件。。
        opts = await readFile(RC, 'utf8');
        opts = decode(opts); //默认类似 cat ~/.npmrc  a=1 这样， 所以我要转化
        console.log("opts=》get我就读取文件",opts)
        return opts[k];
    }
    return '';
}

export let set = async (k, v) => {
    let has = await exists(RC);
    let opts;
    if (has) {
        // 文件有的情况下 读取出来和我设置的合并一起写入进去文件里
        opts = await readFile(RC, 'utf8');
        opts = decode(opts);
        Object.assign(opts, { [k]: v });
    }else{
        opts=Object.assign(DEFAULTS,{[k]:v})
    }
    // 最后合并一起写入进去文件里 encode 在转成a=1这样格式。
    await writeFile(RC,encode(opts),'utf8');
}

// 删除。。。。
export let remove = async (k) => {
    let has=await exists(RC);
    let opts;
    if(has){
        opts=await readFile(RC,'utf8');
        opts=decode(opts);
        delete opts[k];// 删除。。。。
        await writeFile(RC,encode(opts),'utf8')
    }
}


export let getAll = async () => {
    let has=await exists(RC);
    let opts;
    if(has){
        opts=await readFile(RC,'utf8');
        opts=decode(opts);
        return opts;
    }
    return {}
}